package com.yunlongn.async.log;

import com.yunlongn.async.function.RetryScheduleAction;

import java.util.Iterator;

/**
 * @author yunlong.li
 */
public interface RetryScheduleLogService {


    /**
     * 任务首次提交
     * @param id          唯一标识（没有则由框架自动生成）
     * @param action      执行任务
     * @param freePeriods 自由调度周期
     */
    <T> void taskFirstSubmit(String id, RetryScheduleAction<T> action, int... freePeriods);


    /**
     * 任务重试提交
     *
     * @param id 任务ID
     */
    void taskRetrySubmit(String id);

    /**
     * 任务最后一次失败
     *
     * @param id 任务ID
     */
    void taskTailFail(String id);

    /**
     * 任务执行成功
     *
     * @param id 任务ID
     */
    void taskSuccess(String id);

    /**
     * 查询日记
     *
     * @param id
     * @return
     */
    LogDo findLog(String id);


    /**
     * 加载当前所有未完成的任务
     *
     * @return 符合条件的日记迭代器
     */
    Iterator<LogDo> loadNotFinishTask();
}
